package com.example.sbbsec.domain.pay.entity;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import lombok.Data;

/**
 * <p> 微信支付回调通知实体
 *
 * @author lowe.yang on 2018-08-30
 */
@Data
@XStreamAlias("xml")
public final class WxPayNotify {

    /**
     * 返回状态码
     * SUCCESS/FAIL
     * 此字段是通信标识，非交易标识，交易是否成功需要查看trade_state来判断
     */
    @XStreamAlias("return_code")
    private String returnCode;

    /**
     * 返回信息
     * 返回信息，如非空，为错误原因
     * 签名失败
     * 参数格式校验错误
     */
    @XStreamAlias("return_msg")
    private String returnMsg;

    /**
     * 小程序id
     * 微信分配的小程序ID
     */
    @XStreamAlias("appid")
    private String appId;

    /**
     * 商户id
     * 微信支付分配的商户号
     */
    @XStreamAlias("mch_id")
    private String mchId;

    /**
     * 设备号
     * 自定义参数，可以为终端设备号(门店号或收银设备ID)，PC网页或公众号内支付可以传"WEB"
     */
    @XStreamAlias("device_info")
    private String deviceInfo;

    /**
     * 随机字符串，长度要求在32位以内。
     */
    @XStreamAlias("nonce_str")
    private String nonceStr;

    /**
     * 通过签名算法计算得出的签名值
     */
    private String sign;

    /**
     * 签名类型，默认为MD5，支持HMAC-SHA256和MD5。
     */
    @XStreamAlias("sign_type")
    private String signType;

    /**
     * 业务结果 SUCCESS/FAIL
     */
    @XStreamAlias("result_code")
    private String resultCode;

    /**
     * 错误代码
     */
    @XStreamAlias("err_code")
    private String errCode;

    /**
     * 错误信息描述
     */
    @XStreamAlias("err_code_des")
    private String errCodeDes;

    /**
     * 用户标识
     */
    @XStreamAlias("openid")
    private String openId;

    /**
     * 是否关注公众账号
     * Y-关注，N-未关注
     */
    @XStreamAlias("is_subscribe")
    private String isSubscribe;

    /**
     * 交易类型
     * 小程序取值如下：JSAPI
     */
    @XStreamAlias("trade_type")
    private String tradeType;

    /**
     * 付款银行
     */
    @XStreamAlias("bank_type")
    private String bankType;

    /**
     * 符合ISO 4217标准的三位字母代码，默认人民币：CNY
     */
    @XStreamAlias("fee_type")
    private String feeType;

    /**
     * 订单总金额，单位为分
     */
    @XStreamAlias("total_fee")
    private Integer totalFee;

    /**
     * 应结订单金额
     * 应结订单金额=订单金额-非充值代金券金额，应结订单金额<=订单金额。
     */
    @XStreamAlias("settlement_total_fee")
    private Integer settlementTotalFee;

    /**
     * 现金支付金额
     * 现金支付金额订单现金支付金额
     */
    @XStreamAlias("cash_fee")
    private Integer cashFee;

    /**
     * 现金支付货币类型
     */
    @XStreamAlias("cash_fee_type")
    private String cashFeeType;

    /**
     * 总代金券金额
     * 代金券金额<=订单金额，订单金额-代金券金额=现金支付金额
     */
    @XStreamAlias("coupon_fee")
    private Integer couponFee;

    /**
     * 代金券使用数量
     */
    @XStreamAlias("coupon_count")
    private Integer couponCount;

    /**
     * 微信支付订单号
     */
    @XStreamAlias("transaction_id")
    private String transactionId;

    /**
     * 商户订单号
     */
    @XStreamAlias("out_trade_no")
    private String outTradeNo;

    /**
     * 商家数据包
     */
    private String attach;

    /**
     * 商家数据包
     */
    @XStreamAlias("time_end")
    private String timeEnd;


    /**
     * 使用红包后会返回数据,微信牛逼
     * 只有下单时订单使用了优惠，回调通知才会返回券信息。
     * 先定义5组,不够再说
     * coupon_type_$n coupon_id_$n coupon_type_$n $n从0开始
     */
    private String coupon_type_0;
    private String coupon_id_0;
    private Integer coupon_fee_0;

    private String coupon_type_1;
    private String coupon_id_1;
    private Integer coupon_fee_1;

    private String coupon_type_2;
    private String coupon_id_2;
    private Integer coupon_fee_2;

    private String coupon_type_3;
    private String coupon_id_3;
    private Integer coupon_fee_3;

    private String coupon_type_4;
    private String coupon_id_4;
    private Integer coupon_fee_4;
}
